package com.dc.refactoring._3_重新组织数据._11_ReplaceTypeCodeWithClass.step2;

// 【1】为类型码建立一个新的类
public class BloodGroup {

    // 【4】创建一组静态变量保存允许被创建的实例
    public static BloodGroup O = new BloodGroup(0);
    public static BloodGroup A = new BloodGroup(1);
    public static BloodGroup B = new BloodGroup(2);
    public static BloodGroup AB = new BloodGroup(3);

    private static final BloodGroup[] values = {O,A,B,AB};

    // 【2】创建一个记录类型码的字段，其类型和类型码相同
    private final int code;

    private BloodGroup(int code){
        this.code = code;
    }

    // 【3】为字段设置取值函数
    public int getCode(){
        return code;
    }


    // 【5】以一个静态函数根据原本的类型码返回合适的实例
    public static BloodGroup code(int arg){
        return values[arg];
    }
}
